import $ from "jquery";
import {jwtDecode} from "jwt-decode";
const ModuleUser = {
  state: {  //存储所有数据
    id:"",
    username:"",
    photo:"",
    followerCount:0,
    access:"",
    refresh:"", 
    is_login:false,
  },
  getters: {//根据state中的值计算新的值
  },
  mutations: {//所有对state的“简单”修改操作都需要定义在这里，"不支持异步"，可以通过$store.commit()触发
    updateUser(state,user){ 
      state.id=user.id;
      state.username=user.username;
      state.photo=user.photo;
      state.followerCount=user.followerCount;
      state.access=user.access;
      state.refresh=user.refresh;
      state.is_login=user.is_login; //登录状态
    },
    updataAccess(state,access){ 
      state.access=access;
    },
    logout(state){ //退出登录
      state.id="";
      state.username="";
      state.photo="";
      state.followerCount=0;
      state.access="";
      state.refresh="";
      state.is_login=false; //登录状态
    }
  },
  actions: {//定义对state的”复杂“修改操作，"支持异步"，可以通过$store.dispatch()触发。注意不能直接修改
    login(context,data){ //context是store实例,data是传入的参数,包括username、password、success、error
      $.ajax({ //获取jwt
        url:"https://app165.acapp.acwing.com.cn/api/token/",
        type:"POST",
        data:{ //传入的参数
          username:data.username,
          password:data.password,
        },
        success(resp){ 
          //access: 访问令牌，有效期5分钟  refresh: 刷新令牌，有效期14天
          const {access,refresh} = resp;
          const access_object = jwtDecode(access);
          setInterval(()=>{ //每隔4.5分钟刷新一次access令牌
            $.ajax({ 
              url:"https://app165.acapp.acwing.com.cn/api/token/refresh/",
              type:"POST",
              data:{
                refresh,
              },
              success(resp){ 
                //console.log(resp);
                context.commit("updataAccess",resp.access); //调用mutations里面的方法
              }
            })
          },4.5*60*1000); //每4.5分钟刷新一次access令牌,因为access令牌有效期是5分钟
          //console.log(access_object);
          $.ajax({ //获取用户信息
            url:"https://app165.acapp.acwing.com.cn/myspace/getinfo/",
            type:"GET",
            data:{
              user_id:access_object.user_id,
            },
            headers:{
              'Authorization':"Bearer "+ access,//授权
            },
            success(resp){ 
              context.commit("updateUser",{ //调用mutations里面的方法
                ...resp, //把resp的属性解构（把数组或者类数组的对象展开成一系列用，隔开的值）
                access:access,
                refresh:refresh,
                is_login:true,
              });
              data.success(); //调用传入的success函数
            }
          })
        },
        error(){
          data.error();
        }
      });
    }
  },
  modules: {//定义state的子模块
  }
};
export default ModuleUser;  